iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
Kubernetes

Kubernetes三十天就上手系列 第 9

Day 09- 透過 Deployment 來管理無狀態應用

  • 分享至 

  • xImage
  •  

使用 Kubernetes Deployment 管理無狀態應用

前言

在現代微服務架構中,無狀態應用的管理變得尤為重要。Kubernetes 提供了強大的工具來簡化這一過程,其中最為核心的便是 Deployment。通過 Deployment,我們可以聲明式地管理應用的生命周期,包括創建、更新、擴展、縮減和回滾應用。本文將深入探討 Kubernetes Deployment 的概念,並帶領你實際操作,全面掌握其功能。

創建和管理 Deployments

Deployment 的基本概念

Deployment 是 Kubernetes 中的一種高級資源,用於聲明式地管理 Pod 和 ReplicaSet。它不僅支援應用的滾動更新,還能在應用出現問題時進行回滾。此外,通過擴展和縮減 Deployment,我們可以根據流量需求靈活調整應用的副本數量,保證服務的高可用性。

Deployment 的結構

在 Kubernetes 中,Deployment 的 YAML 檔案通常包括以下幾個部分:

  • apiVersion: 定義了使用的 Kubernetes API 版本。
  • kind: 指定這是一個 Deployment 資源。
  • metadata: 包含 Deployment 的名稱、命名空間及其他標識資訊。
  • spec: 定義了 Deployment 的具體設定,如副本數量、選擇器、Pod 樣板等。

YAML 檔案範例

下面是一個簡單的 Deployment 定義,該 Deployment 創建了一個負責啟動三個 Nginx Pod 的 ReplicaSet:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

創建這個 Deployment 的指令如下:

kubectl apply -f nginx-deployment.yaml

這張圖展示了 Kubernetes 中 DeploymentPod 的關係:

Deployment

  • Deployment 負責管理和維護多個 Pod,確保它們正常運行。
  • Pod 是 Kubernetes 中的基本執行單位,在這裡每個 Pod 都運行一個 Nginx 容器。
  • Deployment 會自動管理這些 Pod 的數量和狀態,例如維持三個相同的 Pod 同時運行。

在這個範例中,我們展示了一個 Kubernetes Deployment 如何控制和管理多個相同的 Nginx Pod,以確保應用程式的高可用性和擴展性。

管理 Deployment

檢查 Deployment 狀態

創建 Deployment 後,可以通過以下指令查看已創建的 Deployment 列表:

kubectl get deployments

這個指令會列出當前命名空間下的所有 Deployment,並顯示它們的名稱、就緒副本數、更新狀態、可用副本數以及運行時間等資訊。

如果你需要查看某個特定 Deployment 的詳細資訊,可以使用以下指令:

kubectl describe deployment nginx-deployment

更新 Deployment

當我們需要更新應用的設定時,例如更新容器的映像版本,可以修改 YAML 檔案中的 image 字段,然後重新應用更新:

containers:
- name: nginx
  image: nginx:1.19.0

更新後應用修改:

kubectl apply -f nginx-deployment.yaml

滾動更新和回滾

滾動更新是 Kubernetes 提供的一項強大功能,可以在不中斷服務的情況下,逐步將舊的 Pod 替換為新的 Pod。你可以使用以下指令查看滾動更新的進度:

kubectl rollout status deployment nginx-deployment

如果更新過程中出現了問題,你還可以隨時回滾到前一個穩定版本:

kubectl rollout undo deployment nginx-deployment

擴展和縮減 Deployment

Kubernetes 允許你根據實際需求擴展或縮減應用的副本數。例如,如果預期流量增加,可以擴展 Deployment 以提高應用的處理能力:

kubectl scale deployment nginx-deployment --replicas=5

相反,當流量下降時,可以縮減副本數以節省資源:

kubectl scale deployment nginx-deployment --replicas=2

實踐中的最佳做法

  1. 設定健康檢查探針:為 Deployment 中的 Pod 設定健康檢查探針(如 liveness 和 readiness probes),可以幫助 Kubernetes 自動檢測並恢復不健康的 Pod,提升應用的穩定性。
  2. 使用資源限制:為容器設置資源限制(如 CPU 和RAM),以避免資源耗盡影響 Cluster 中其他應用的運行。
  3. 管理滾動更新的策略:根據應用的特性,設定滾動更新策略,如 maxUnavailable 和 maxSurge,以實現更靈活的更新控制。

總結

通過這篇文章,我們學習了如何使用 Kubernetes Deployment 管理無狀態應用的生命周期。從基本概念到實際操作,我們逐步深入,掌握了創建、更新、擴展、縮減和回滾 Deployment 的各種技巧。這些知識對於在正式環境中管理應用至關重要。

接下來,我們將探討 Kubernetes Service 的使用,了解如何在不同的網路環境中暴露應用,從而實現 Cluster 內部和外部的穩定存取。


上一篇
Day 08- Kubernetes 的基本單位 Pod
下一篇
Day 10- Kubernetes 中的 Service
系列文
Kubernetes三十天就上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言